// Generated from code/ch25/Pie.g by ANTLR 4.9.0-SNAPSHOT


import { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener";

import { AddExprContext } from "./PieParser";
import { SubExprContext } from "./PieParser";
import { SimpleVarContext } from "./PieParser";
import { FieldVarContext } from "./PieParser";
import { StructDefStatementContext } from "./PieParser";
import { AssignStatementContext } from "./PieParser";
import { ReturnStatementContext } from "./PieParser";
import { PrintStatementContext } from "./PieParser";
import { IfStatementContext } from "./PieParser";
import { WhileStatementContext } from "./PieParser";
import { CallStatementContext } from "./PieParser";
import { EmptyStatementContext } from "./PieParser";
import { EqExprContext } from "./PieParser";
import { LtExprContext } from "./PieParser";
import { ProgramContext } from "./PieParser";
import { AtomContext } from "./PieParser";
import { MulexprContext } from "./PieParser";
import { AddexprContext } from "./PieParser";
import { ExprContext } from "./PieParser";
import { StatementContext } from "./PieParser";
import { SlistContext } from "./PieParser";
import { StructDefinitionContext } from "./PieParser";
import { VardefContext } from "./PieParser";
import { InstanceContext } from "./PieParser";
import { QidContext } from "./PieParser";
import { FunctionDefinitionContext } from "./PieParser";
import { CallContext } from "./PieParser";


/**
 * This interface defines a complete listener for a parse tree produced by
 * `PieParser`.
 */
export interface PieListener extends ParseTreeListener {
	/**
	 * Enter a parse tree produced by the `addExpr`
	 * labeled alternative in `PieParser.addexpr`.
	 * @param ctx the parse tree
	 */
	enterAddExpr?: (ctx: AddExprContext) => void;
	/**
	 * Exit a parse tree produced by the `addExpr`
	 * labeled alternative in `PieParser.addexpr`.
	 * @param ctx the parse tree
	 */
	exitAddExpr?: (ctx: AddExprContext) => void;

	/**
	 * Enter a parse tree produced by the `subExpr`
	 * labeled alternative in `PieParser.addexpr`.
	 * @param ctx the parse tree
	 */
	enterSubExpr?: (ctx: SubExprContext) => void;
	/**
	 * Exit a parse tree produced by the `subExpr`
	 * labeled alternative in `PieParser.addexpr`.
	 * @param ctx the parse tree
	 */
	exitSubExpr?: (ctx: SubExprContext) => void;

	/**
	 * Enter a parse tree produced by the `simpleVar`
	 * labeled alternative in `PieParser.qid`.
	 * @param ctx the parse tree
	 */
	enterSimpleVar?: (ctx: SimpleVarContext) => void;
	/**
	 * Exit a parse tree produced by the `simpleVar`
	 * labeled alternative in `PieParser.qid`.
	 * @param ctx the parse tree
	 */
	exitSimpleVar?: (ctx: SimpleVarContext) => void;

	/**
	 * Enter a parse tree produced by the `fieldVar`
	 * labeled alternative in `PieParser.qid`.
	 * @param ctx the parse tree
	 */
	enterFieldVar?: (ctx: FieldVarContext) => void;
	/**
	 * Exit a parse tree produced by the `fieldVar`
	 * labeled alternative in `PieParser.qid`.
	 * @param ctx the parse tree
	 */
	exitFieldVar?: (ctx: FieldVarContext) => void;

	/**
	 * Enter a parse tree produced by the `structDefStatement`
	 * labeled alternative in `PieParser.statement`.
	 * @param ctx the parse tree
	 */
	enterStructDefStatement?: (ctx: StructDefStatementContext) => void;
	/**
	 * Exit a parse tree produced by the `structDefStatement`
	 * labeled alternative in `PieParser.statement`.
	 * @param ctx the parse tree
	 */
	exitStructDefStatement?: (ctx: StructDefStatementContext) => void;

	/**
	 * Enter a parse tree produced by the `assignStatement`
	 * labeled alternative in `PieParser.statement`.
	 * @param ctx the parse tree
	 */
	enterAssignStatement?: (ctx: AssignStatementContext) => void;
	/**
	 * Exit a parse tree produced by the `assignStatement`
	 * labeled alternative in `PieParser.statement`.
	 * @param ctx the parse tree
	 */
	exitAssignStatement?: (ctx: AssignStatementContext) => void;

	/**
	 * Enter a parse tree produced by the `returnStatement`
	 * labeled alternative in `PieParser.statement`.
	 * @param ctx the parse tree
	 */
	enterReturnStatement?: (ctx: ReturnStatementContext) => void;
	/**
	 * Exit a parse tree produced by the `returnStatement`
	 * labeled alternative in `PieParser.statement`.
	 * @param ctx the parse tree
	 */
	exitReturnStatement?: (ctx: ReturnStatementContext) => void;

	/**
	 * Enter a parse tree produced by the `printStatement`
	 * labeled alternative in `PieParser.statement`.
	 * @param ctx the parse tree
	 */
	enterPrintStatement?: (ctx: PrintStatementContext) => void;
	/**
	 * Exit a parse tree produced by the `printStatement`
	 * labeled alternative in `PieParser.statement`.
	 * @param ctx the parse tree
	 */
	exitPrintStatement?: (ctx: PrintStatementContext) => void;

	/**
	 * Enter a parse tree produced by the `ifStatement`
	 * labeled alternative in `PieParser.statement`.
	 * @param ctx the parse tree
	 */
	enterIfStatement?: (ctx: IfStatementContext) => void;
	/**
	 * Exit a parse tree produced by the `ifStatement`
	 * labeled alternative in `PieParser.statement`.
	 * @param ctx the parse tree
	 */
	exitIfStatement?: (ctx: IfStatementContext) => void;

	/**
	 * Enter a parse tree produced by the `whileStatement`
	 * labeled alternative in `PieParser.statement`.
	 * @param ctx the parse tree
	 */
	enterWhileStatement?: (ctx: WhileStatementContext) => void;
	/**
	 * Exit a parse tree produced by the `whileStatement`
	 * labeled alternative in `PieParser.statement`.
	 * @param ctx the parse tree
	 */
	exitWhileStatement?: (ctx: WhileStatementContext) => void;

	/**
	 * Enter a parse tree produced by the `callStatement`
	 * labeled alternative in `PieParser.statement`.
	 * @param ctx the parse tree
	 */
	enterCallStatement?: (ctx: CallStatementContext) => void;
	/**
	 * Exit a parse tree produced by the `callStatement`
	 * labeled alternative in `PieParser.statement`.
	 * @param ctx the parse tree
	 */
	exitCallStatement?: (ctx: CallStatementContext) => void;

	/**
	 * Enter a parse tree produced by the `emptyStatement`
	 * labeled alternative in `PieParser.statement`.
	 * @param ctx the parse tree
	 */
	enterEmptyStatement?: (ctx: EmptyStatementContext) => void;
	/**
	 * Exit a parse tree produced by the `emptyStatement`
	 * labeled alternative in `PieParser.statement`.
	 * @param ctx the parse tree
	 */
	exitEmptyStatement?: (ctx: EmptyStatementContext) => void;

	/**
	 * Enter a parse tree produced by the `eqExpr`
	 * labeled alternative in `PieParser.expr`.
	 * @param ctx the parse tree
	 */
	enterEqExpr?: (ctx: EqExprContext) => void;
	/**
	 * Exit a parse tree produced by the `eqExpr`
	 * labeled alternative in `PieParser.expr`.
	 * @param ctx the parse tree
	 */
	exitEqExpr?: (ctx: EqExprContext) => void;

	/**
	 * Enter a parse tree produced by the `ltExpr`
	 * labeled alternative in `PieParser.expr`.
	 * @param ctx the parse tree
	 */
	enterLtExpr?: (ctx: LtExprContext) => void;
	/**
	 * Exit a parse tree produced by the `ltExpr`
	 * labeled alternative in `PieParser.expr`.
	 * @param ctx the parse tree
	 */
	exitLtExpr?: (ctx: LtExprContext) => void;

	/**
	 * Enter a parse tree produced by `PieParser.program`.
	 * @param ctx the parse tree
	 */
	enterProgram?: (ctx: ProgramContext) => void;
	/**
	 * Exit a parse tree produced by `PieParser.program`.
	 * @param ctx the parse tree
	 */
	exitProgram?: (ctx: ProgramContext) => void;

	/**
	 * Enter a parse tree produced by `PieParser.atom`.
	 * @param ctx the parse tree
	 */
	enterAtom?: (ctx: AtomContext) => void;
	/**
	 * Exit a parse tree produced by `PieParser.atom`.
	 * @param ctx the parse tree
	 */
	exitAtom?: (ctx: AtomContext) => void;

	/**
	 * Enter a parse tree produced by `PieParser.mulexpr`.
	 * @param ctx the parse tree
	 */
	enterMulexpr?: (ctx: MulexprContext) => void;
	/**
	 * Exit a parse tree produced by `PieParser.mulexpr`.
	 * @param ctx the parse tree
	 */
	exitMulexpr?: (ctx: MulexprContext) => void;

	/**
	 * Enter a parse tree produced by `PieParser.addexpr`.
	 * @param ctx the parse tree
	 */
	enterAddexpr?: (ctx: AddexprContext) => void;
	/**
	 * Exit a parse tree produced by `PieParser.addexpr`.
	 * @param ctx the parse tree
	 */
	exitAddexpr?: (ctx: AddexprContext) => void;

	/**
	 * Enter a parse tree produced by `PieParser.expr`.
	 * @param ctx the parse tree
	 */
	enterExpr?: (ctx: ExprContext) => void;
	/**
	 * Exit a parse tree produced by `PieParser.expr`.
	 * @param ctx the parse tree
	 */
	exitExpr?: (ctx: ExprContext) => void;

	/**
	 * Enter a parse tree produced by `PieParser.statement`.
	 * @param ctx the parse tree
	 */
	enterStatement?: (ctx: StatementContext) => void;
	/**
	 * Exit a parse tree produced by `PieParser.statement`.
	 * @param ctx the parse tree
	 */
	exitStatement?: (ctx: StatementContext) => void;

	/**
	 * Enter a parse tree produced by `PieParser.slist`.
	 * @param ctx the parse tree
	 */
	enterSlist?: (ctx: SlistContext) => void;
	/**
	 * Exit a parse tree produced by `PieParser.slist`.
	 * @param ctx the parse tree
	 */
	exitSlist?: (ctx: SlistContext) => void;

	/**
	 * Enter a parse tree produced by `PieParser.structDefinition`.
	 * @param ctx the parse tree
	 */
	enterStructDefinition?: (ctx: StructDefinitionContext) => void;
	/**
	 * Exit a parse tree produced by `PieParser.structDefinition`.
	 * @param ctx the parse tree
	 */
	exitStructDefinition?: (ctx: StructDefinitionContext) => void;

	/**
	 * Enter a parse tree produced by `PieParser.vardef`.
	 * @param ctx the parse tree
	 */
	enterVardef?: (ctx: VardefContext) => void;
	/**
	 * Exit a parse tree produced by `PieParser.vardef`.
	 * @param ctx the parse tree
	 */
	exitVardef?: (ctx: VardefContext) => void;

	/**
	 * Enter a parse tree produced by `PieParser.instance`.
	 * @param ctx the parse tree
	 */
	enterInstance?: (ctx: InstanceContext) => void;
	/**
	 * Exit a parse tree produced by `PieParser.instance`.
	 * @param ctx the parse tree
	 */
	exitInstance?: (ctx: InstanceContext) => void;

	/**
	 * Enter a parse tree produced by `PieParser.qid`.
	 * @param ctx the parse tree
	 */
	enterQid?: (ctx: QidContext) => void;
	/**
	 * Exit a parse tree produced by `PieParser.qid`.
	 * @param ctx the parse tree
	 */
	exitQid?: (ctx: QidContext) => void;

	/**
	 * Enter a parse tree produced by `PieParser.functionDefinition`.
	 * @param ctx the parse tree
	 */
	enterFunctionDefinition?: (ctx: FunctionDefinitionContext) => void;
	/**
	 * Exit a parse tree produced by `PieParser.functionDefinition`.
	 * @param ctx the parse tree
	 */
	exitFunctionDefinition?: (ctx: FunctionDefinitionContext) => void;

	/**
	 * Enter a parse tree produced by `PieParser.call`.
	 * @param ctx the parse tree
	 */
	enterCall?: (ctx: CallContext) => void;
	/**
	 * Exit a parse tree produced by `PieParser.call`.
	 * @param ctx the parse tree
	 */
	exitCall?: (ctx: CallContext) => void;
}

